package ar.edu.utn.frgp.EjemploHibernate.dao.impl;

import java.math.BigInteger;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import ar.edu.utn.frgp.EjemploHibernate.dao.DefaultGenericDao;
import ar.edu.utn.frgp.EjemploHibernate.dao.TransferenciaDao;
import ar.edu.utn.frgp.EjemploHibernate.model.Transferencia;

public class TransferenciaDaoImpl extends DefaultGenericDao implements
		TransferenciaDao {

	public void create(Transferencia obj) {
		Session session = hibernateTemplate.getSessionFactory()
				.getCurrentSession();
		session.save(obj);
	}

	public void update(Transferencia obj) {
		Session session = hibernateTemplate.getSessionFactory()
				.getCurrentSession();
		session.update(obj);
		session.beginTransaction();
	}

	public void delete(Transferencia obj) {
	}

	public List<Transferencia> getAll() {
		Session session = hibernateTemplate.getSessionFactory()
				.getCurrentSession();

		@SuppressWarnings("unchecked")
		List<Transferencia> transferencias = session.createCriteria(
				Transferencia.class).list();

		return transferencias;
	}

	@SuppressWarnings("unchecked")
	public List<Transferencia> getTransferenciasXCuenta(int idCuentaOrigen,
			String tipoTransferencia) {
		Session session = hibernateTemplate.getSessionFactory()
				.getCurrentSession();

		List<Transferencia> transferencias = (List<Transferencia>) session
				.createCriteria(Transferencia.class)
				.add(Restrictions.eq("idCuentaOrigen", idCuentaOrigen))
				.add(Restrictions.eq("tipoTransferencia", tipoTransferencia))
				.list();
		return transferencias;
	}

	public int getMaxidTransferencia() {
		Session session = hibernateTemplate.getSessionFactory()
				.getCurrentSession();
		BigInteger cant;
		cant = (BigInteger) session.createSQLQuery(
				"select count(idTransferencia) from transferencia;")
				.uniqueResult();
		return cant.intValue();
	}

}
